package com.java.lock_problem;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 活锁
 */
public class LiveLock {
    static AtomicInteger count = new AtomicInteger(10);
    
    public static void main(String[] args) {
        new Thread(() -> {
            // 小于0则退出循环结束线程
            while (count.intValue() > 0) {
                System.out.println(Thread.currentThread().getName() + "正在运行，值为" + count);
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                count.decrementAndGet();
            }
        }).start();
        
        new Thread(() -> {
            // 大于20则退出循环结束线程
            while (count.intValue() < 20) {
                System.out.println(Thread.currentThread().getName() + "正在运行，值为" + count);
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                count.incrementAndGet();
            }
        }).start();
        
        /**
         * 输出结果如下，线程一直无法结束
         * Thread-0正在运行，值为10
         * Thread-1正在运行，值为10
         * Thread-0正在运行，值为9
         * Thread-1正在运行，值为10
         * Thread-1正在运行，值为10
         * Thread-0正在运行，值为10
         */
    }
}
